home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 011 / sm.arc / SMENTRY2.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-11-20  |  31.4 KB  |  920 lines

  1. 10000  'SMENTRY2 - STOCK CHARTING AND DATA ENTRY PROGRAM - RELEASE 2.1
  2. 10330  SCREEN 0,0,0:COLOR 7,0:WIDTH 80:DEFINT A-Z:OPTION BASE 1
  3. 10340  KEY OFF:FOR J=1 TO 10:KEY J,"":NEXT J:GOSUB 25820
  4. 10360  B=0:C=0:Y=0:T=0:X=0:DIM P(200)
  5. 10380  DEF SEG=0:D=PEEK(&H410) AND &H30
  6. 10410  Z$=MKI$(0):C$=Z$:H$="SMENTRY2.HS1":W$=SPACE$(80)
  7. 10420  XD$=SPACE$(64):PD$=SPACE$(32)
  8. 10440  OPEN"SMSETUP2.CTL"AS #1 LEN=64:IF LOF(1)<=0 THEN 10490
  9. 10450  FIELD#1,64 AS B$:GET#1:IF LEFT$(B$,4)<>"SMC2" THEN 10490
  10. 10460  IF MID$(B$,11,1)<>"Y" THEN CLOSE#1:RUN"SMADDEL2"
  11. 10470  D$=B$:CLOSE#1:GOTO 10540
  12. 10490  CLOSE#1:KILL"SMSETUP2.CTL":RUN"SMADDEL2"
  13. 10540  DIM MT(12):FOR J=1 TO 12:READ MT(J):NEXT J
  14. 10550  DATA 31,28,31,30,31,30,31,31,30,31,30,31
  15. 10560  DC$=DATE$:DY=VAL(RIGHT$(DC$,4))-1920:DM=VAL(LEFT$(DC$,2))
  16. 10570  DD=VAL(MID$(DC$,4,2)):MT(2)=28+ABS(DY MOD 4 = 0):J=DM:DJ=DD
  17. 10580  IF J>1 THEN J=J-1:DJ=DJ+MT(J):GOTO 10580
  18. 10590  DW=(INT((DY-1)*365.25)+DJ+5) MOD 7:IF DW=0 THEN DW=7
  19. 10630  DIM BS(22):FOR J=1 TO 22:READ BS(J):NEXT J
  20. 10640  DATA &H8B55,&HB8EC,&H0600,&H07B7,&H768B,&H8A0C,&H8B2C
  21. 10650  DATA &H0A76,&H0C8A,&H768B,&H8A08,&H8B34,&H0676,&H148A
  22. 10660  DATA &HCDFE,&HC9FE,&HCEFE,&HCAFE,&H10CD,&HCA5D,&H0008,&H0000
  23. 10750  DIM SC(33):FOR J=1 TO 33:READ SC(J):NEXT J
  24. 10760  DATA &H8B55,&H50EC,&H5153,&H5652,&HB68B,&H0010,&H2C8A,&HB68B
  25. 10770  DATA &H000E,&H0C8A,&HB68B,&H000C,&H348A,&HB68B,&H000A,&H148A
  26. 10780  DATA &HB68B,&H0008,&H3C8A,&HB68B,&H0006,&H048A,&HCDFE,&HC9FE
  27. 10790  DATA &HCEFE,&HCAFE,&H06B4,&H10CD,&H5A5E,&H5B59,&H5D58,&H0CCA,&H0000
  28. 10840  TM=90:DIM TP!(90),SV!(90),HP!(90),LP!(90)
  29. 10850  DIM CP!(90),M1!(90),M2!(90),M3!(90)
  30. 10860  XM=111:DIM XR$(111):FOR J=1 TO XM:XR$(J)=XD$:NEXT J
  31. 10870  IF MID$(D$,12,1)<>"*" THEN 10910
  32. 10880  LOCATE 23,1:PRINT"Insert DATA disk and press ENTER or Esc when ready.";
  33. 10890  GOSUB 29250:IF ESC THEN 10990
  34. 10910  GOSUB 26640:IF ESC THEN 10990
  35. 10920  ON SGN(XC)+2 GOTO 10940,10950,10930
  36. 10930  LOCATE X1,1:GOSUB 25440:X2=X1+X5-X4:GOTO 11030
  37. 10940  LOCATE 23,1:PRINT"Index file not found on data disk.";:GOTO 10960
  38. 10950  LOCATE 23,1:PRINT"Index file has no data in it.";
  39. 10960  PRINT"  Insert correct DATA disk and press ENTER,"
  40. 10970  PRINT"or press Esc to go back to add/delete stocks program.";
  41. 10980  GOSUB 29250:IF NOT ESC THEN 10910
  42. 10990  GOSUB 12930:GOTO 10990
  43. 11030  LOCATE 21,1
  44. 11040  PRINT"The  ";CHR$(24);"  ";CHR$(25);"  Home  End  PgUp  PgDn";
  45. 11050  PRINT"  keys are used to select an individual stock.  ";
  46. 11060  PRINT"E=data Entry or correction of vol-      ";
  47. 11070  PRINT"G=bar Graph for selected stock    Q=Quit";
  48. 11080  PRINT"  ume and prices for selected stock     ";
  49. 11090  PRINT"A=Add or delete any stock         H=Help";
  50. 11100  PRINT"Press appropriate key for required function.";SPACE$(35);
  51. 11110  GOSUB 25980
  52. 11120  LOCATE 24,45,1:GOSUB 29650
  53. 11130  IF LEFT$(C$,1)=CHR$(0) THEN 11170
  54. 11140  F=INSTR(1,"281379AaEeGgHhQq",LEFT$(C$,1))
  55. 11150  IF F<=0 THEN GOSUB 29830:GOTO 11120
  56. 11160  IF F<=6 THEN 11190 ELSE 11210
  57. 11170  F=INSTR(1,"PHOQGI",RIGHT$(C$,1))
  58. 11180  IF F<=0 THEN GOSUB 29830:GOTO 11120
  59. 11190  GOSUB 25930:ON F GOSUB 24950,24850,25330,25140,25230,25040
  60. 11200  GOTO 11110
  61. 11210  F=(F-5)\2:GOSUB 25930:ON F GOTO 11230,11250,11310,11460,11490
  62. 11230  GOSUB 12830:GOTO 11030
  63. 11250  IF CVI(MID$(XD$,35,2))=0 THEN 11430
  64. 11260  GOSUB 27340:IF ESC THEN 11030
  65. 11270  GOSUB 24030:T6=0:GOSUB 23130:X=1:GOTO 11530
  66. 11310  DEF SEG=&HB800:J=PEEK(0)
  67. 11320  POKE 0,&H55:IF PEEK(0)<>&H55 THEN POKE 0,J:GOTO 11410
  68. 11330  POKE 0,&HAA:IF PEEK(0)<>&HAA THEN POKE 0,J:GOTO 11410
  69. 11340  POKE 0,J:IF CVI(MID$(XD$,35,2))=0 THEN 11430
  70. 11350  GOSUB 27340:IF ESC THEN 11030 ELSE J=TL
  71. 11360  IF CP!(J)>0 THEN 12030
  72. 11370  J=J-1:IF J<=0 THEN J=TC
  73. 11380  IF J<>TL THEN 11360
  74. 11390  LOCATE 25,1:COLOR 23,0:PRINT"No price history data was entered.";
  75. 11400  COLOR 7,0:OK=0:BEEP:GOTO 11030
  76. 11410  LOCATE 25,1:COLOR 23,0:PRINT"Graphics adapter not available.";
  77. 11420  COLOR 7,0:OK=0:BEEP:GOTO 11110
  78. 11430  LOCATE 25,1:COLOR 23,0:PRINT"Price history file not available.";
  79. 11440  COLOR 7,0:OK=0:BEEP:GOTO 11110
  80. 11460  MID$(H$,12)="1":GOSUB 13050:IF F>=0 THEN 11030
  81. 11470  GOSUB 25820:GOSUB 25440:GOTO 11030
  82. 11490  GOSUB 12530:GOTO 11030
  83. 11530  LOCATE 21,1
  84. 11540  PRINT"The  ";CHR$(24);" ";CHR$(25);" ";CHR$(26);" ";CHR$(27);"  Home ";
  85. 11550  PRINT"End PgUp PgDn  keys are used to select the day, week or item.";
  86. 11560  PRINT"A=Add new day or week  M=Moving average ";
  87. 11570  PRINT"period   S=Select another stock   Q=Quit";
  88. 11580  PRINT"E=Enter volume/prices  D=stock Dividend(";
  89. 11590  PRINT"split)  C=Change P=Print G=Graph  H=Help";
  90. 11600  PRINT"Press appropriate key for required function.";SPACE$(35);
  91. 11610  J=T5:Y=T2:GOSUB 23580
  92. 11620  LOCATE 24,45,1:GOSUB 29650:IF LEFT$(C$,1)=CHR$(0) THEN 11660
  93. 11630  F=INSTR(1,"24681379AaCcDdEeMmPpHhQqSsGg",LEFT$(C$,1))
  94. 11640  IF F<=0 THEN GOSUB 29830:GOTO 11620
  95. 11650  IF F<=8 THEN 11680 ELSE F=(F-7)\2:IF F<=6 THEN 11710 ELSE 11730
  96. 11660  F=INSTR(1,"PKMHOQGI",RIGHT$(C$,1))
  97. 11670  IF F<=0 THEN GOSUB 29830:GOTO 11620
  98. 11680  J=T5:Y=T2:GOSUB 23530
  99. 11690  ON F GOSUB 22650,22340,22390,22450,23130,22940,23030,22840
  100. 11700  GOTO 11610
  101. 11710  ON F GOSUB 17560,19040,20040,18050,21030,17040
  102. 11720  GOTO 11530
  103. 11730  J=T5:Y=T2:GOSUB 23530
  104. 11740  ON F-6 GOTO 11760,11790,11810,11890
  105. 11760  MID$(H$,12)="2":GOSUB 13050:IF F>=0 THEN 11530
  106. 11770  GOSUB 24030:GOSUB 23250:GOTO 11530
  107. 11790  GOSUB 12530:GOTO 11530
  108. 11810  GOSUB 29730:IF UPD THEN GOSUB 27740
  109. 11820  GOSUB 25820:GOSUB 25440:GOTO 11030
  110. 11890  DEF SEG=&HB800:J=PEEK(0)
  111. 11900  POKE 0,&H55:IF PEEK(0)<>&H55 THEN POKE 0,J:GOTO 11980
  112. 11910  POKE 0,&HAA:IF PEEK(0)<>&HAA THEN POKE 0,J:GOTO 11980
  113. 11920  POKE 0,J:J=TL
  114. 11930  IF CP!(J)>0 THEN 12030
  115. 11940  J=J-1:IF J<=0 THEN J=TC
  116. 11950  IF J<>TL THEN 11930
  117. 11960  LOCATE 25,1:COLOR 23,0:PRINT"No price history data was entered.";
  118. 11970  COLOR 7,0:OK=0:BEEP:GOTO 11610
  119. 11980  LOCATE 25,1:COLOR 23,0:PRINT"Graphics adapter not available.";
  120. 11990  COLOR 7,0:OK=0:BEEP:GOTO 11610
  121. 12030  GOSUB 13550
  122. 12040  LOCATE 25,1:PRINT"data Entry   Select  Print   Quit  Help";
  123. 12050  GOSUB 29650:F=INSTR(1,"PpEeSsHhQq",LEFT$(C$,1))
  124. 12060  IF F<=0 THEN BEEP:GOTO 12050
  125. 12070  F=(F+1)\2:ON F GOTO 12090,12110,12130,12160,12180
  126. 12090  GOSUB 15030:GOTO 12040
  127. 12110  GOSUB 12480:GOSUB 24030:T6=0:GOSUB 23130:X=1:GOTO 11530
  128. 12130  GOSUB 12480:IF UPD THEN GOSUB 27740
  129. 12140  GOSUB 25820:GOSUB 25440:GOTO 11030
  130. 12160  GOSUB 12480:MID$(H$,12)="3":GOSUB 13050:GOTO 12030
  131. 12180  GOSUB 12480:GOSUB 12530:GOTO 12030
  132. 12480  DEF SEG=0:POKE &H410,(PEEK(&H410) AND &HCF) OR D
  133. 12490  SCREEN 0,0,0:WIDTH 80:LOCATE ,,0:RETURN
  134. 12530  GOSUB 29730:LOCATE 22,1
  135. 12540  PRINT"Do you want to quit the stock charting system and go to DOS";
  136. 12550  GOSUB 29550:IF ESC OR NOT YES THEN F=0:RETURN
  137. 12560  GOSUB 29730:IF UPD THEN GOSUB 27740
  138. 12570  R=0:GOSUB 26440:IF MID$(D$,12,1)<>"*" THEN 12610
  139. 12580  LOCATE 23,1:PRINT"Insert PROGRAM diskette and press ENTER.";
  140. 12590  GOSUB 29250:IF ESC THEN F=0:RETURN
  141. 12610  MID$(D$,11,1)="N":ON ERROR GOTO 12640
  142. 12620  OPEN"SMSETUP2.CTL" AS #1 LEN=64:ON ERROR GOTO 29930
  143. 12630  FIELD#1,64 AS B$:LSET B$=D$:PUT#1:CLOSE#1:GOTO 12660
  144. 12640  IF ERR=71 THEN RESUME 12650 ELSE 29930
  145. 12650  GOSUB 29040:IF ESC THEN F=0:RETURN ELSE 12610
  146. 12660  IF MID$(D$,12,1)<>"*" THEN 12690
  147. 12670  LOCATE 23,1:PRINT"Insert diskette with DOS on it and press ENTER.";
  148. 12680  GOSUB 29250:IF ESC THEN F=0:RETURN
  149. 12690  CLS:SYSTEM
  150. 12830  GOSUB 29730:LOCATE 22,1
  151. 12840  PRINT"Do you want to add, delete or change stock data";
  152. 12850  GOSUB 29550:IF ESC OR NOT YES THEN F=0:RETURN
  153. 12860  GOSUB 29730:IF UPD THEN GOSUB 27740
  154. 12870  R=0:GOSUB 26440
  155. 12930  IF MID$(D$,12,1)<>"*" THEN 12960
  156. 12940  LOCATE 23,1:PRINT"Insert PROGRAM diskette and press ENTER.";
  157. 12950  GOSUB 29250:IF ESC THEN F=0:RETURN
  158. 12960  LOCATE 23,1:PRINT"One moment please, loading program ...  ";
  159. 12970  ON ERROR GOTO 12980:RUN"SMADDEL2"
  160. 12980  IF ERR=53 OR ERR=71 THEN RESUME 12990 ELSE 29930
  161. 12990  GOSUB 29040:GOTO 12960
  162. 13050  GOSUB 29730
  163. 13060  IF MID$(D$,12,1)<>"*" THEN 13110
  164. 13070  LOCATE 24,1:PRINT"Insert PROGRAM diskette and press ENTER,";
  165. 13080  PRINT" or press Esc to cancel Help screens.";
  166. 13090  GOSUB 29250:IF ESC THEN F=0:RETURN
  167. 13110  ON ERROR GOTO 13310:OPEN H$ FOR INPUT AS #1
  168. 13120  ON ERROR GOTO 29930:CLS:L=0
  169. 13130  IF EOF(1) THEN 13270
  170. 13140  LINE INPUT#1,B$:L=L+1:IF L<24 THEN PRINT B$:GOTO 13130
  171. 13150  PRINT"Press ENTER key to see next Help screen, ";
  172. 13160  PRINT"or Esc to cancel Help screen display.";
  173. 13170  GOSUB 29250:IF NOT ESC THEN CLS:L=1:PRINT B$:GOTO 13130
  174. 13180  CLOSE#1:F=-1:IF MID$(D$,12,1)<>"*" THEN RETURN
  175. 13190  CLS:LOCATE 24,1:PRINT"Insert DATA diskette";
  176. 13200  PRINT" and press ENTER or Esc key.";:GOSUB 29250:RETURN
  177. 13270  CLOSE#1:F=-1:LOCATE 24,1:IF MID$(D$,12,1)<>"*" THEN 13290
  178. 13280  PRINT"Insert DATA diskette.  ";
  179. 13290  GOSUB 29240:RETURN
  180. 13310  IF ERR=53 THEN RESUME 13340
  181. 13320  IF ERR=71 THEN RESUME 13330 ELSE 29930
  182. 13330  GOSUB 29040:IF ESC THEN F=0:RETURN ELSE 13110
  183. 13340  LOCATE 25,1:COLOR 23,0:PRINT"Help screen not available.";
  184. 13350  COLOR 7,0:BEEP:OK=0:F=0:LOCATE 23,1
  185. 13360  IF MID$(D$,12,1)<>"*" THEN RETURN
  186. 13370  PRINT"Insert PROGRAM diskette and press ENTER to try again,"
  187. 13380  PRINT"or insert DATA diskette and press Esc to cancel Help.";
  188. 13390  GOSUB 29250:IF ESC THEN RETURN ELSE 13110
  189. 13550  CLS:DEF SEG=0:POKE &H410,(PEEK(&H410) AND &HCF) OR &H20:SCREEN 1,0
  190. 13560  PRINT MID$(XD$,5,24);:TT=TC:TF=TL+1:TB=TF:IF TF>TC THEN TF=1:TB=1
  191. 13570  IF CP!(TB)>0 THEN 13650
  192. 13580  TT=TT-1:TB=TB+1:IF TB>TC THEN TB=1
  193. 13590  IF TB<>TF THEN 13570
  194. 13650  LOCATE 1,28:PRINT USING"###";TT;
  195. 13660  IF TN=1 THEN PRINT"D "; ELSE PRINT"W ";
  196. 13670  W!=TP!(TL):GOSUB 23420:PRINT MID$(W$,3,8);
  197. 13680  GOSUB 24630:LOCATE 2,1:PRINT"PE=";:GOSUB 24320
  198. 13690  LOCATE 2,9:PRINT"Y=";:GOSUB 24370
  199. 13710  IF CP!>=0.125 AND (GL!>0 OR GH!>0) THEN LOCATE 2,16:GOSUB 24430
  200. 13720  IF SL!=0 OR ABS(SL!)>=999.999 THEN 13840
  201. 13730  IF SL!<=-99.995 THEN 13790
  202. 13740  IF SL!<=-9.9995 OR SL!>=99.9995 THEN 13780
  203. 13750  IF SL!<=-0.9995 OR SL!>=9.9995 THEN 13770
  204. 13760  LOCATE 2,31:PRINT USING"STOP=#.###";SL!;:GOTO 13840
  205. 13770  LOCATE 2,30:PRINT USING"STOP=##.###";SL!;:GOTO 13840
  206. 13780  LOCATE 2,29:PRINT USING"STOP=###.###";SL!;:GOTO 13840
  207. 13790  LOCATE 2,29:PRINT USING"STOP=####.##";SL!;
  208. 13840  WL!=999999:WH!=0:SH!=0:J=TL
  209. 13850  J=J+1:IF J>TC THEN J=1
  210. 13860  IF SV!(J)>SH! THEN SH!=SV!(J)
  211. 13870  IF HP!(J)>WH! THEN WH!=HP!(J)
  212. 13880  IF M1!(J)>WH! THEN WH!=M1!(J)
  213. 13890  IF M2!(J)>WH! THEN WH!=M2!(J)
  214. 13900  IF M3!(J)>WH! THEN WH!=M3!(J)
  215. 13910  IF LP!(J)>0 AND LP!(J)<WL! THEN WL!=LP!(J)
  216. 13920  IF M1!(J)>0 AND M1!(J)<WL! THEN WL!=M1!(J)
  217. 13930  IF M2!(J)>0 AND M2!(J)<WL! THEN WL!=M2!(J)
  218. 13940  IF M3!(J)>0 AND M3!(J)<WL! THEN WL!=M3!(J)
  219. 13950  IF J<>TL THEN 13850
  220. 13990  IF WL!>=999999 THEN WL!=0
  221. 14040  IF INT(WH!+0.9999)>=100 OR WH!-WL!>18 THEN 14160
  222. 14050  WL!=INT(WL!*9.83333)/10:WH!=INT(WH!*10+0.9999)/10
  223. 14060  WS!=INT((WH!-WL!)/1.5+0.9999)/10
  224. 14070  WL!=WL!-INT((WS!*15-(WH!-WL!))*5+0.5)/10:IF WL!<0 THEN WL!=0
  225. 14080  WH!=WL!+WS!*15:T!=WH!
  226. 14110  FOR J=3 TO 17:LOCATE J,36
  227. 14120  IF T!>=9.95 THEN PRINT USING"##.#";T!;:T!=T!-WS!:GOTO 14150
  228. 14130  IF T!>=0.95 THEN PRINT USING"#.#";T!;:T!=T!-WS!:GOTO 14150
  229. 14140  IF T!>=0.095 THEN PRINT USING".#";T!;:T!=T!-WS!
  230. 14150  NEXT J:WS!=WS!/8:GOTO 14310
  231. 14160  WL!=INT(WL!*0.983333):WH!=INT(WH!+0.9999)
  232. 14170  WS!=INT((WH!-WL!)/15+0.9999)
  233. 14180  WL!=WL!-INT((WS!*15-(WH!-WL!))*0.5+0.5):IF WL!<0 THEN WL!=0
  234. 14190  WH!=WL!+WS!*15:T!=WH!
  235. 14200  FOR J=3 TO 17:LOCATE J,35:PRINT T!;:T!=T!-WS!:NEXT J:WS!=WS!/8
  236. 14310  SS!=INT(SH!/(187-141)*0.8+0.9999):MID$(W$,1)=SPACE$(6)
  237. 14320  LOCATE 23,35:MID$(W$,1)=STR$(SS!):PRINT LEFT$(W$,6);
  238. 14330  LOCATE 21,35:MID$(W$,1)=STR$(SS!*3):PRINT LEFT$(W$,6);
  239. 14340  LOCATE 19,35:MID$(W$,1)=STR$(SS!*5):PRINT LEFT$(W$,6);:SS!=SS!*1.25
  240. 14350  LINE(275,16)-(275,187):LINE(0,187)-(275,187):LINE(0,139)-(275,139)
  241. 14360  FOR J=19 TO 179 STEP 8:LINE(274,J)-(276,J):NEXT J
  242. 14430  XD=272\TC:X=273-TC*XD:XS=0:YS=0:J=TL
  243. 14440  J=J+1:IF J>TC THEN J=1
  244. 14450  IF CP!(J)>=0.125 THEN 14470
  245. 14460  IF CP!(J)<0 THEN 14590 ELSE XS=0:YS=0:GOTO 14550
  246. 14470  Y1=139-CINT((LP!(J)-WL!)/WS!):Y2=139-CINT((HP!(J)-WL!)/WS!)
  247. 14480  IF Y1<>Y2 THEN LINE(X,Y1)-(X,Y2) ELSE LINE(X,Y1-1)-(X,Y1+1)
  248. 14490  Y=139-CINT((CP!(J)-WL!)/WS!):LINE(X,Y)-(X+1,Y)
  249. 14510  IF M1!(J)>=0.01 THEN Y=139-CINT((M1!(J)-WL!)/WS!):LINE(X,Y)-(X-1,Y)
  250. 14520  IF M3!(J)<0.01 THEN XS=0:YS=0:GOTO 14550
  251. 14530  Y=139-CINT((M3!(J)-WL!)/WS!):IF YS>0 THEN LINE(XS,YS)-(X,Y)
  252. 14540  XS=X:YS=Y
  253. 14550  IF SV!(J)>0 THEN LINE(X,187)-(X,187-CINT(SV!(J)/SS!))
  254. 14560  IF J=TB OR J=TL THEN LINE(X,189)-(X,187)
  255. 14590  X=X+XD:IF J<>TL THEN 14440 ELSE RETURN
  256. 15030  LOCATE 25,1:PRINT"Is printer ready (Y=Yes, N=No)?        ";
  257. 15040  LOCATE 25,33:MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF C$<>Z$ THEN 15040
  258. 15050  MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF C$=Z$ THEN 15050
  259. 15060  IF LEFT$(C$,1)="Y" OR LEFT$(C$,1)="y" THEN 15090
  260. 15070  IF LEFT$(C$,1)="N" OR LEFT$(C$,1)="n" THEN RETURN
  261. 15080  IF LEFT$(C$,1)=CHR$(27) THEN RETURN ELSE BEEP:GOTO 15050
  262. 15090  J=33:K=1:IF MID$(XD$,1,1)<>" " THEN 15110
  263. 15100  LOCATE 1,29:PRINT SPACE$(6);MID$(XD$,29,6);:GOTO 15140
  264. 15110  J=J-1:K=K+1:IF K<=4 AND MID$(XD$,K,1)<>" " THEN 15110
  265. 15120  LOCATE 1,29:IF J>29 THEN PRINT SPACE$(J-29);
  266. 15130  PRINT MID$(XD$,29,6);"(";MID$(XD$,1,K-1);")";
  267. 15140  LOCATE 25,1:PRINT USING"###";TT;
  268. 15150  IF TN=1 THEN PRINT" DAYS  "; ELSE PRINT" WEEKS ";
  269. 15160  W!=TP!(TB):GOSUB 23420:PRINT MID$(W$,3,8);" THROUGH ";
  270. 15170  W!=TP!(TL):GOSUB 23420:PRINT MID$(W$,3,8);"    ";
  271. 15180  IF MID$(D$,13,1)<>"1" THEN 15530
  272. 15330  WIDTH"LPT1:",255:DEF SEG=&HB800
  273. 15340  LPRINT CHR$(13);CHR$(27);"A";CHR$(8);
  274. 15350  FOR X=0 TO 79
  275. 15360  FOR Y=1 TO 100
  276. 15370  T=X+80*(Y-1):C=PEEK(T):IF C=13 THEN C=9
  277. 15380  B=PEEK(8192+T):IF B=13 THEN B=9
  278. 15390  P(Y)=C:P(Y+100)=B
  279. 15400  NEXT:LPRINT CHR$(10);SPACE$(5);CHR$(27);"L";CHR$(32);CHR$(3);
  280. 15410  FOR Y=100 TO 1 STEP -1:LPRINT STRING$(4,P(Y+100));STRING$(4,P(Y));:NEXT
  281. 15420  MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF LEFT$(C$,1)=CHR$(27) THEN X=79
  282. 15430  NEXT:LPRINT CHR$(13);CHR$(12);CHR$(27);"@";:WIDTH"LPT1:",80:GOTO 15580
  283. 15530  MID$(W$,1)=CHR$(VAL("&HCD")):MID$(W$,2)=CHR$(VAL("&H05"))
  284. 15540  MID$(W$,3)=CHR$(VAL("&HCB")):MID$(W$,4)=CHR$(0)
  285. 15550  DEF SEG:MID$(W$,79)=CHR$(PEEK(VARPTR(W$)+1))
  286. 15560  MID$(W$,80)=CHR$(PEEK(VARPTR(W$)+2)):AD=CVI(MID$(W$,79,2))
  287. 15570  CALL AD:OPEN"LPT1:"FOR OUTPUT AS #1:PRINT#1,CHR$(12);:CLOSE#1
  288. 15580  LOCATE 1,28:PRINT USING"###";TT;
  289. 15590  IF TN=1 THEN PRINT"D "; ELSE PRINT"W ";
  290. 15600  W!=TP!(TL):GOSUB 23420:PRINT MID$(W$,3,8);:RETURN
  291. 17040  GOSUB 23530:GOSUB 29730:LOCATE 21,1:PRINT"Is the printer ready";
  292. 17050  GOSUB 29550:IF ESC OR NOT YES THEN F=0:RETURN
  293. 17060  LOCATE 21,1:PRINT"Press Esc to stop printing after the next line.";
  294. 17070  OPEN"LPT1:"FOR OUTPUT AS #1
  295. 17080  J=TL:M=4:P=0:S=56
  296. 17110  IF P>0 THEN PRINT#1,CHR$(12);
  297. 17120  P=P+1:PRINT#1,TAB(M+1);MID$(XD$,5,24);" ";MID$(XD$,29,6);
  298. 17130  L=1:IF MID$(XD$,1,1)=" " THEN 17160
  299. 17140  L=L+1:IF L<=4 AND MID$(XD$,L,1)<>" " THEN 17140
  300. 17150  PRINT#1," (";MID$(XD$,1,L-1);")";
  301. 17160  L=1:IF P>1 THEN 17310
  302. 17170  PRINT#1,TAB(M+50);USING"ANNUAL EARNINGS =###.##";CE!
  303. 17180  L=L+1:IF CP!<0.125 OR (GL!<=0 AND GH!<=0) THEN 17210
  304. 17190  PRINT#1,TAB(M+1);"3-5 YEAR PRICE GOAL";GL!;"-";GH!;
  305. 17200  PRINT#1,TAB(M+32);USING"####% TO####%";RL;RH;
  306. 17210  PRINT#1,TAB(M+50);USING"ANNUAL DIVIDEND =###.##";CD!
  307. 17220  L=L+1:PRINT#1,TAB(M+50);"P/E = ";
  308. 17230  IF CM!<=0 OR CM!>=99.5 THEN PRINT#1,"NMF";:GOTO 17260
  309. 17240  IF CM!>=9.995 THEN PRINT#1,USING"##.#";CM!;:GOTO 17260
  310. 17250  PRINT#1,USING"#.##";CM!;
  311. 17260  PRINT#1,TAB(M+62);"YLD =  ";:IF CY!<0 OR CY!>=99.95 THEN 17310
  312. 17270  IF CY!>=9.995 THEN PRINT#1,USING"##.#";CY!;:GOTO 17310
  313. 17280  PRINT#1,USING"#.##";CY!;
  314. 17310  PRINT#1,:PRINT#1,TAB(M+1);STRING$(72,"-")
  315. 17320  PRINT#1,TAB(M+12);"VOLUME";
  316. 17330  PRINT#1,TAB(M+57);"MOVING AVERAGES"
  317. 17340  PRINT#1,TAB(M+3);"DATE      100's       HIGH       LOW       CLOSE";
  318. 17350  IF TN<>1 THEN 17370
  319. 17360  PRINT#1,TAB(M+55);USING"###-DAY    ###-DAY";P1;P3:GOTO 17380
  320. 17370  PRINT#1,TAB(M+54);USING"###-WEEK   ###-WEEK";P1;P3
  321. 17380  PRINT#1,TAB(M+1);STRING$(72,"-"):L=L+5
  322. 17390  W!=TP!(J):GOSUB 23420:PRINT#1,TAB(M+1);MID$(W$,3,8);
  323. 17400  PRINT#1,USING"#########";SV!(J);
  324. 17410  IF CP!(J)<0 THEN PRINT#1,TAB(M+44);"holiday";:GOTO 17450
  325. 17420  PRINT#1,USING"#######.###";HP!(J);LP!(J);CP!(J);
  326. 17430  IF M1!(J)>=0.000999999 THEN PRINT#1,TAB(M+54);USING"####.###";M1!(J);
  327. 17440  IF M3!(J)>=0.000999999 THEN PRINT#1,TAB(M+65);USING"####.###";M3!(J);
  328. 17450  PRINT#1,:MID$(C$,1)=Z$:MID$(C$,1)=INKEY$
  329. 17460  IF LEFT$(C$,1)=CHR$(27) THEN 17490
  330. 17470  L=L+1:J=J-1:IF J<1 THEN J=TC
  331. 17480  IF J<>TL THEN IF L<=S THEN 17390 ELSE 17110
  332. 17490  PRINT#1,CHR$(12);:CLOSE#1:F=0:RETURN
  333. 17560  T=TN:EY=CINT(TP!(TL)/1000):ED=CINT(TP!(TL)-EY*1000)
  334. 17570  ND=365+ABS(EY MOD 4 = 0):ED=ED+T:IF ED>ND THEN EY=EY+1:ED=ED-ND
  335. 17580  EW=(INT((EY-1)*365.25)+ED+5) MOD 7:IF EW=0 THEN EW=7
  336. 17590  IF EW>5 THEN T=8-EW:GOTO 17570
  337. 17600  W!=EY*1000+ED:J=T5:Y=T2:GOSUB 23530:GOSUB 29730
  338. 17610  T=TL:TL=TF:TF=TF+1:IF TF>TC THEN TF=1
  339. 17620  TP!=TP!(TL):SV!=SV!(TL):HP!=HP!(TL):LP!=LP!(TL)
  340. 17630  CP!=CP!(TL):M1!=M1!(TL):M2!=M2!(TL):M3!=M3!(TL)
  341. 17640  TP!(TL)=W!:SV!(TL)=0:HP!(TL)=0:LP!(TL)=0:CP!(TL)=0
  342. 17650  M1!(TL)=0:M2!(TL)=0:M3!(TL)=0
  343. 17660  IF T6<>T THEN T6=0:GOSUB 23130 ELSE T2=T3:GOSUB 22670
  344. 17670  IF TN<>1 THEN 17790
  345. 17680  LOCATE 21,1:PRINT"Is this a holiday";:GOSUB 29550:IF ESC THEN 17970
  346. 17690  IF YES THEN CP!(TL)=-1:UPD=-1:J=T5:Y=T2:GOSUB 23340:RETURN
  347. 17790  GOSUB 18530:GOSUB 29730:IF ESC THEN 17970
  348. 17800  GOSUB 24220:A1!=0:A2!=0:A3!=0:N1=0:N2=0:N3=0:J=TL
  349. 17810  IF N1>=P1 AND N2>=P2 AND N3>=P3 THEN 17930
  350. 17820  ON SGN(CP!(J))+2 GOTO 17860,17930,17830
  351. 17830  IF N1<P1 THEN A1!=A1!+CP!(J):N1=N1+1
  352. 17840  IF N2<P2 THEN A2!=A2!+CP!(J):N2=N2+1
  353. 17850  IF N3<P3 THEN A3!=A3!+CP!(J):N3=N3+1
  354. 17860  J=J-1:IF J<=0 THEN J=TC
  355. 17870  IF J<>TL THEN 17810
  356. 17930  IF N1>=P1 AND P1>0 THEN M1!(TL)=A1!/CSNG(N1)
  357. 17940  IF N2>=P2 AND P2>0 THEN M2!(TL)=A2!/CSNG(N2)
  358. 17950  IF N3>=P3 AND P3>0 THEN M3!(TL)=A3!/CSNG(N3)
  359. 17960  J=T5:Y=T2:GOSUB 23870:GOSUB 23920:GOSUB 23970:UPD=-1:RETURN
  360. 17970  T2=T1:GOSUB 22470:T2=T3:T5=T6:TF=TL:TL=TL-1:IF TL<=0 THEN TL=TC
  361. 17980  TP!(TF)=TP!:SV!(TF)=SV!:HP!(TF)=HP!:LP!(TF)=LP!
  362. 17990  CP!(TF)=CP!:M1!(TF)=M1!:M2!(TF)=M2!:M3!(TF)=M3!:RETURN
  363. 18050  GOSUB 29730:IF CVI(MID$(XD$,35,2))>0 THEN 18110
  364. 18060  LOCATE 21,1:PRINT"Is this a holiday";
  365. 18070  GOSUB 29550:IF NOT YES THEN 18110 ELSE IF CP!(T5)<0 THEN RETURN
  366. 18080  SV!(T5)=0:HP!(T5)=0:LP!(T5)=0:CP!(T5)=-1
  367. 18090  M1!(T5)=0:M2!(T5)=0:M3!(T5)=0:J=T5:Y=T2:GOSUB 23340
  368. 18100  IF T5=TL OR (P1+P2+P3<=0) THEN UPD=-1:GOSUB 23580:RETURN ELSE 18230
  369. 18110  SV!=SV!(T5):HP!=HP!(T5):LP!=LP!(T5):CP!=CP!(T5)
  370. 18120  J=T5:Y=T2:IF CP!(T5)>=0 THEN GOSUB 23530 ELSE CP!(T5)=0:GOSUB 23340
  371. 18130  GOSUB 18530:IF ESC THEN 18280 ELSE IF CP!=CP!(T5) THEN 18160
  372. 18140  IF T5=TL THEN GOSUB 24220
  373. 18150  IF (P1+P2+P3)>0 THEN 18230
  374. 18160  UPD=-1:J=T5:Y=T2:GOSUB 23580:RETURN
  375. 18230  LOCATE 21,1:PRINT"One moment please; computing moving averages ...";
  376. 18240  GOSUB 21550:UPD=-1:J=T5
  377. 18250  FOR Y=T2 TO T3
  378. 18260  GOSUB 23870:GOSUB 23920:GOSUB 23970:J=J+1:IF J>TC THEN J=1
  379. 18270  NEXT Y:J=T5:Y=T2:GOSUB 23580:RETURN
  380. 18280  SV!(T5)=SV!:HP!(T5)=HP!:LP!(T5)=LP!:CP!(T5)=CP!
  381. 18290  J=T5:Y=T2:GOSUB 23340:GOSUB 23580:RETURN
  382. 18530  COLOR 0,7:GOSUB 23620:COLOR 7,0
  383. 18540  LOCATE 21,1:PRINT"Sales volume (100's)?";SPACE$(14);
  384. 18550  LOCATE 21,22:R=0:WL!=0:WH!=199999:GOSUB 28110
  385. 18560  IF ESC THEN RETURN ELSE IF L>0 THEN SV!(T5)=W!:GOTO 18580
  386. 18570  IF SV!(T5)<0 THEN GOSUB 29870:GOSUB 28130:GOTO 18560
  387. 18580  J=T5:GOSUB 23620
  388. 18610  COLOR 0,7:GOSUB 23670:COLOR 7,0
  389. 18620  LOCATE 21,1:PRINT"High or ask price?";SPACE$(17);
  390. 18630  LOCATE 21,19:R=1:WL!=0:WH!=3000:GOSUB 28110
  391. 18640  IF ESC THEN RETURN ELSE IF L>0 THEN HP!(T5)=W!:GOTO 18660
  392. 18650  IF HP!(T5)<0 THEN GOSUB 29870:GOSUB 28130:GOTO 18640
  393. 18660  J=T5:GOSUB 23670
  394. 18710  COLOR 0,7:GOSUB 23720:COLOR 7,0
  395. 18720  LOCATE 21,1:PRINT"Low or bid price?";SPACE$(18);
  396. 18730  LOCATE 21,18:R=1:WL!=0:WH!=3000:GOSUB 28110
  397. 18740  IF ESC THEN RETURN ELSE IF L>0 THEN LP!(T5)=W!:GOTO 18810
  398. 18750  W!=LP!(T5):IF W!<0 THEN GOSUB 29870:GOSUB 28130:GOTO 18740
  399. 18810  J=T5:GOSUB 23720:IF W!>HP!(T5) THEN 18840
  400. 18820  IF W!=HP!(T5) THEN CP!(T5)=W!:GOSUB 23770:RETURN
  401. 18830  IF W!>0 THEN 18910 ELSE GOSUB 29870:GOSUB 28130:GOTO 18740
  402. 18840  LOCATE 25,1:COLOR 23,0:PRINT"Low/bid exceeds high/ask, re-enter.";
  403. 18850  COLOR 7,0:OK=0:BEEP:GOTO 18610
  404. 18910  COLOR 0,7:GOSUB 23770:COLOR 7,0
  405. 18920  LOCATE 21,1:PRINT"Closing price?";SPACE$(21);
  406. 18930  LOCATE 21,15:R=1:WL!=0:WH!=3000:GOSUB 28110
  407. 18940  IF ESC THEN RETURN ELSE IF L>0 THEN CP!(T5)=W!:GOTO 18960
  408. 18950  IF CP!(T5)<0 THEN GOSUB 29870:GOSUB 28130:GOTO 18940
  409. 18960  J=T5:GOSUB 23770:IF CP!(T5)>=LP!(T5) AND CP!(T5)<=HP!(T5) THEN RETURN
  410. 18970  IF CP!(T5)<=0 THEN GOSUB 29870:GOSUB 28130:GOTO 18940
  411. 18980  LOCATE 25,1:COLOR 23,0:PRINT"Bad range, re-enter high/low/close.";
  412. 18990  COLOR 7,0:OK=0:BEEP:GOTO 18610
  413. 19040  IF CP!(T5)<0 THEN 18050
  414. 19050  GOSUB 29730:ON X GOSUB 19530,19630,19730,19830
  415. 19060  IF ESC THEN RETURN
  416. 19070  UPD=-1:IF CP!=CP!(T5) THEN RETURN
  417. 19080  IF T5=TL THEN GOSUB 24220
  418. 19090  IF (P1+P2+P3)<=0 THEN RETURN
  419. 19110  LOCATE 21,1:PRINT"One moment please; computing moving averages ...";
  420. 19120  GOSUB 21550:J=T5
  421. 19130  FOR Y=T2 TO T3
  422. 19140  GOSUB 23870:GOSUB 23920:GOSUB 23970:J=J+1:IF J>TC THEN J=1
  423. 19150  NEXT Y:J=T5:Y=T2:GOSUB 23580:RETURN
  424. 19530  LOCATE 21,1:PRINT"Sales volume (100's)?";
  425. 19540  R=0:WL!=0:WH!=199999:GOSUB 28110
  426. 19550  IF ESC THEN RETURN ELSE IF L>0 THEN SV!(T5)=W!:RETURN
  427. 19560  IF SV!(T5)>=0 THEN RETURN ELSE GOSUB 29870:GOSUB 28130:GOTO 19550
  428. 19630  LOCATE 21,1:PRINT"High or ask price?";
  429. 19640  R=1:WL!=CP!(T5):WH!=3000:GOSUB 28110
  430. 19650  IF ESC THEN RETURN ELSE IF L>0 THEN HP!(T5)=W!:RETURN
  431. 19660  IF HP!(T5)>=WL! THEN RETURN
  432. 19670  GOSUB 29870:GOSUB 28130:GOTO 19650
  433. 19730  LOCATE 21,1:PRINT"Low or bid price?";
  434. 19740  R=1:WL!=0:WH!=CP!(T5):GOSUB 28110
  435. 19750  IF ESC THEN RETURN ELSE IF L>0 THEN LP!(T5)=W!:RETURN
  436. 19760  IF LP!(T5)>=WL! AND LP!(T5)<=WH! THEN RETURN
  437. 19770  GOSUB 29870:GOSUB 28130:GOTO 19750
  438. 19830  LOCATE 21,1:PRINT"Closing price?";
  439. 19840  R=1:WL!=LP!(T5):WH!=HP!(T5):GOSUB 28110
  440. 19850  IF ESC THEN RETURN ELSE IF L>0 THEN 19890
  441. 19860  IF CP!(T5)>=WL! AND CP!(T5)<=WH! THEN RETURN
  442. 19870  GOSUB 29870:GOSUB 28130:GOTO 19850
  443. 19890  CP!(T5)=W!:RETURN
  444. 20040  GOSUB 29730:LOCATE 21,1
  445. 20050  PRINT"This will adjust all the numbers ABOVE t";
  446. 20060  PRINT"he selector block.  You type in two num-";
  447. 20070  PRINT"bers, for example 3 and 2 for a 3-for-2 ";
  448. 20080  PRINT"stock split. The first can be a decimal,";
  449. 20090  PRINT"for example 1.05-to-1 for a 5% dividend;";
  450. 20100  PRINT" but the second must be a whole number. ";
  451. 20110  PRINT"Type the numbers here:           - FOR -";
  452. 20120  PRINT"                  (Press Esc to cancel)";
  453. 20130  LOCATE 24,23:R=1:WL!=1:WH!=10:GOSUB 28110
  454. 20140  IF L<=0 THEN RETURN
  455. 20150  T!=INT(W!*100+0.5)/100:LOCATE 24,23:PRINT USING"#######.## ";T!;
  456. 20160  IF T!<2 AND T!>1 THEN U!=1:LOCATE 24,42:PRINT"1";:GOTO 20240
  457. 20210  LOCATE 24,41:R=0:WL!=1:WH!=10:GOSUB 28110
  458. 20220  IF L<=0 THEN RETURN
  459. 20230  U!=W!:LOCATE 24,41:PRINT SPACE$(11);:LOCATE 24,41:PRINT U!;
  460. 20240  IF T!>U! THEN 20310 ELSE IF T!<U! THEN 20270
  461. 20250  LOCATE 25,1:COLOR 23,0:PRINT"1.00 ratio illegal, try again.";
  462. 20260  COLOR 7,0:OK=0:BEEP:LOCATE 24,1:GOTO 20110
  463. 20270  LOCATE 25,1:COLOR 23,0:PRINT"WARNING - this is a reverse split!";
  464. 20280  COLOR 7,0:BEEP:OK=0
  465. 20310  LOCATE 24,52:PRINT"Is this OK";SPACE$(18);
  466. 20320  LOCATE 24,62:GOSUB 29550:IF NOT YES THEN LOCATE 24,1:GOTO 20110
  467. 20330  LOCATE 25,1:PRINT"Re-computing high/low/close";
  468. 20340  PRINT" and moving averages ...";:W!=U!/T!:J=TL
  469. 20410  J=J+1:IF J>TC THEN J=1
  470. 20420  IF J=T5 THEN 20510
  471. 20430  IF CP!(J)<=0 THEN 20410
  472. 20440  SV!(J)=SV!(J)/W!:HP!(J)=HP!(J)*W!
  473. 20450  LP!(J)=LP!(J)*W!:CP!(J)=CP!(J)*W!
  474. 20460  IF M1!(J)>0 THEN M1!(J)=M1!(J)*W!
  475. 20470  IF M2!(J)>0 THEN M2!(J)=M2!(J)*W!
  476. 20480  IF M3!(J)>0 THEN M3!(J)=M3!(J)*W!
  477. 20490  GOTO 20410
  478. 20510  J=T4:FOR Y=T1 TO T3
  479. 20520  GOSUB 23620:GOSUB 23670:GOSUB 23720:GOSUB 23770
  480. 20530  GOSUB 23870:GOSUB 23920:GOSUB 23970:J=J+1:IF J>TC THEN J=1
  481. 20540  NEXT Y:J=T5:Y=T2:GOSUB 23580:UPD=-1:LOCATE 25,1:PRINT SPACE$(51);
  482. 20550  H1=21:H2=25:G1=1:G2=80:GOSUB 29740:LOCATE 23,1
  483. 20560  PRINT"Do you want to adjust dividends, earnings and price goals"
  484. 20570  PRINT"(Reply N if current values already refle";
  485. 20580  PRINT"ct the split or dividend.)";
  486. 20590  LOCATE 23,58:GOSUB 29550:IF NOT YES THEN RETURN
  487. 20630  LOCATE 24,1:PRINT SPACE$(79);
  488. 20640  CD!=CD!*W!:MID$(XD$,39,2)=MKI$(CINT(CD!*100))
  489. 20650  CE!=CE!*W!:MID$(XD$,41,2)=MKI$(CINT(CE!*100))
  490. 20660  SL!=SL!*W!:MID$(XD$,43,2)=MKI$(CINT(SL!*32))
  491. 20670  GL!=GL!*W!:MID$(XD$,45,2)=MKI$(CINT(GL!*32))
  492. 20680  GH!=GH!*W!:MID$(XD$,47,2)=MKI$(CINT(GH!*32))
  493. 20690  GOSUB 24220:LSET XR$(X5)=XD$:R=1:GOSUB 26440:RETURN
  494. 21030  GOSUB 23530:GOSUB 29730:N1=P1:N2=P2:N3=P3:IF UPD THEN GOSUB 27740
  495. 21040  LOCATE 21,1:PRINT"The moving average periods must be at le";
  496. 21050  PRINT"ast 3 but not more than";TC;"days/weeks."
  497. 21060  PRINT"Enter zero where moving averages are not";
  498. 21070  PRINT" wanted.  For best results, enter the"
  499. 21080  PRINT"long-term (or only) period last, so its ";
  500. 21090  PRINT"averages are in the rightmost column.";
  501. 21110  LOCATE 24,1:PRINT"Enter the  FIRST moving average period:";
  502. 21120  R=0:WL!=0:WH!=CSNG(TC):GOSUB 28110
  503. 21130  IF L<0 THEN 21490 ELSE IF L=0 THEN 21210
  504. 21140  IF W!=1 OR W!=2 THEN GOSUB 21460:GOSUB 28130:GOTO 21130
  505. 21150  P1=CINT(W!):GOSUB 24470:GOTO 21210
  506. 21160  LOCATE 24,1:PRINT"Enter the MIDDLE moving average period:";
  507. 21170  R=0:WL!=0:WH!=CSNG(TC):GOSUB 28110
  508. 21180  IF L<0 THEN 21490 ELSE IF L=0 THEN 21210
  509. 21190  IF W!=1 OR W!=2 THEN GOSUB 21460:GOSUB 28130:GOTO 21180
  510. 21200  P2=CINT(W!):GOSUB 24520
  511. 21210  LOCATE 24,1:PRINT"Enter the  LAST  moving average period:";
  512. 21220  R=0:WL!=0:WH!=CSNG(TC):GOSUB 28110
  513. 21230  IF L<0 THEN 21490 ELSE IF L=0 THEN 21260
  514. 21240  IF W!=1 OR W!=2 THEN GOSUB 21460:GOSUB 28130:GOTO 21230
  515. 21250  P3=CINT(W!):GOSUB 24570
  516. 21260  IF N1=P1 AND N2=P2 AND N3=P3 THEN RETURN
  517. 21270  J=TF:LOCATE 24,1
  518. 21280  PRINT"One moment please, computing moving averages ...";SPACE$(31);
  519. 21310  IF N1<>P1 THEN M1!(J)=0
  520. 21320  IF N2<>P2 THEN M2!(J)=0
  521. 21330  IF N3<>P3 THEN M3!(J)=0
  522. 21340  J=J+1:IF J>TC THEN J=1
  523. 21350  IF J<>TF THEN 21310
  524. 21360  IF P1>0 OR P2>0 OR P3>0 THEN GOSUB 21550
  525. 21370  J=T4:FOR Y=T1 TO T3
  526. 21380  GOSUB 23870:GOSUB 23920:GOSUB 23970:J=J+1:IF J>TC THEN J=1
  527. 21390  NEXT Y:GOSUB 29730
  528. 21410  LOCATE 21,1:PRINT"Are these moving averages to be permanent";
  529. 21420  GOSUB 29550:UPD=YES:IF YES THEN RETURN
  530. 21430  LOCATE 22,1:PRINT"You must then go back to the (S)elect screen,"
  531. 21440  PRINT"before making any changes to volume or prices.";
  532. 21450  LOCATE 24,1:GOSUB 29240:RETURN
  533. 21460  LOCATE 25,1:COLOR 23,0:PRINT"Must be at least 3 days or weeks.";
  534. 21470  COLOR 7,0:OK=0:BEEP:RETURN
  535. 21490  P1=N1:GOSUB 23870:P2=N2:GOSUB 23920:P3=N3:GOSUB 23970:RETURN
  536. 21530  IF P1<=0 AND P2<=0 AND P3<=0 THEN RETURN
  537. 21540  LOCATE 25,1:PRINT"Computing moving averages ...";
  538. 21550  N1=0:N2=0:N3=0:S1=1:S2=1:S3=1
  539. 21560  B1=TL:B2=TL:B3=TL:A1!=0:A2!=0:A3!=0:J=TF
  540. 21590  IF CP!(J)<=0 THEN 21940
  541. 21610  IF P1<=0 THEN 21710
  542. 21620  A1!=A1!+CP!(J):N1=N1+1
  543. 21630  IF N1<=P1 THEN 21670
  544. 21640  B1=B1+1:IF B1>TC THEN B1=1
  545. 21650  IF CP!(B1)<=0 THEN 21640
  546. 21660  A1!=A1!-CP!(B1):N1=N1-1
  547. 21670  IF N1>=P1 THEN M1!(J)=A1!/CSNG(N1):GOTO 21710
  548. 21680  IF M1!(J)<=0 THEN S1=0
  549. 21690  IF S1=0 THEN M1!(J)=0
  550. 21710  IF P2<=0 THEN 21810
  551. 21720  A2!=A2!+CP!(J):N2=N2+1
  552. 21730  IF N2<=P2 THEN 21770
  553. 21740  B2=B2+1:IF B2>TC THEN B2=1
  554. 21750  IF CP!(B2)<=0 THEN 21740
  555. 21760  A2!=A2!-CP!(B2):N2=N2-1
  556. 21770  IF N2>=P2 THEN M2!(J)=A2!/CSNG(N2):GOTO 21810
  557. 21780  IF M2!(J)<=0 THEN S2=0
  558. 21790  IF S2=0 THEN M2!(J)=0
  559. 21810  IF P3<=0 THEN 21970
  560. 21820  A3!=A3!+CP!(J):N3=N3+1
  561. 21830  IF N3<=P3 THEN 21870
  562. 21840  B3=B3+1:IF B3>TC THEN B3=1
  563. 21850  IF CP!(B3)<=0 THEN 21840
  564. 21860  A3!=A3!-CP!(B3):N3=N3-1
  565. 21870  IF N3>=P3 THEN M3!(J)=A3!/CSNG(N3):GOTO 21970
  566. 21880  IF M3!(J)<=0 THEN S3=0
  567. 21890  IF S3=0 THEN M3!(J)=0
  568. 21930  GOTO 21970
  569. 21940  IF CP!(J)<0 THEN 21970
  570. 21950  N1=0:N2=0:N3=0:S1=1:S2=1:S3=1:B1=J:B2=J:B3=J
  571. 21960  A1!=0:A2!=0:A3!=0:M1!(J)=0:M2!(J)=0:M3!(J)=0
  572. 21970  IF J=TL THEN RETURN
  573. 21980  J=J+1:IF J>TC THEN J=1
  574. 21990  GOTO 21590
  575. 22340  IF X>1 AND X<=4 THEN X=X-1:RETURN ELSE GOSUB 29850:RETURN
  576. 22390  IF X>=1 AND X<4 THEN X=X+1:RETURN ELSE GOSUB 29850:RETURN
  577. 22450  IF T2>T1 AND T2<=T3 THEN 22580
  578. 22460  IF T2<>T1 OR T5=TF THEN GOSUB 29850:RETURN
  579. 22470  T4=T4-1:IF T4<=0 THEN T4=TC
  580. 22480  T5=T4:T6=T6-1:IF T6<=0 THEN T6=TC
  581. 22490  H1=T1:G1=1:H2=T3:G2=80:Z=0:L=1
  582. 22500  SC(27)=&H7B4:DEF SEG:AD=VARPTR(SC(1)):CALL AD(H1,G1,H2,G2,Z,L)
  583. 22510  J=T5:Y=T2:GOSUB 23330:RETURN
  584. 22580  T5=T5-1:IF T5<=0 THEN T5=TC
  585. 22590  T2=T2-1:RETURN
  586. 22650  IF T2>=T1 AND T2<T3 THEN 22780
  587. 22660  IF T2<>T3 OR T5=TL THEN GOSUB 29850:RETURN
  588. 22670  T6=T6+1:IF T6>TC THEN T6=1
  589. 22680  T5=T6:T4=T4+1:IF T4>TC THEN T4=1
  590. 22690  H1=T1:G1=1:H2=T3:G2=80:Z=0:L=1
  591. 22700  SC(27)=&H6B4:DEF SEG:AD=VARPTR(SC(1)):CALL AD(H1,G1,H2,G2,Z,L)
  592. 22710  J=T5:Y=T2:GOSUB 23330:RETURN
  593. 22780  T5=T5+1:IF T5>TC THEN T5=1
  594. 22790  T2=T2+1:RETURN
  595. 22840  J=1:IF T4=TF THEN 22890
  596. 22850  T4=T4-1:IF T4<=0 THEN T4=TC
  597. 22860  J=J+1:IF T4<>TF AND J<=10 THEN 22850
  598. 22870  GOSUB 23250:T5=T4:T2=T1:RETURN
  599. 22890  IF T5<>T4 THEN T5=T4:T2=T1:RETURN ELSE GOSUB 29850:RETURN
  600. 22940  J=1:IF T6=TL THEN 22990
  601. 22950  T4=T4+1:IF T4>TC THEN T4=1
  602. 22960  T6=T6+1:IF T6>TC THEN T6=1
  603. 22970  J=J+1:IF T6<>TL AND J<=10 THEN 22950
  604. 22980  GOSUB 23250:T5=T6:T2=T3:RETURN
  605. 22990  IF T5<>T6 THEN T5=T6:T2=T3:RETURN ELSE GOSUB 29850:RETURN
  606. 23030  IF T4=TF THEN 23080
  607. 23040  T4=TF:GOSUB 23250:GOTO 23090
  608. 23080  IF T5=TF THEN GOSUB 29850:RETURN
  609. 23090  T5=TF:T2=T1:RETURN
  610. 23130  IF T6=TL THEN 23180
  611. 23140  IF TC<=20-T1 THEN T4=TF:GOTO 23160
  612. 23150  T4=TL-(19-T1):IF T4<=0 THEN T4=T4+TC
  613. 23160  GOSUB 23250:GOTO 23190
  614. 23180  IF T5=TL THEN GOSUB 29850:RETURN
  615. 23190  T5=TL:T2=T3:RETURN
  616. 23250  T3=T1:T6=T4
  617. 23260  J=T6:Y=T3:GOSUB 23330
  618. 23270  IF T6=TL OR T3>=19 THEN RETURN
  619. 23280  T3=T3+1:T6=T6+1:IF T6>TC THEN T6=1
  620. 23290  GOTO 23260
  621. 23330  W!=TP!(J):GOSUB 23420:LOCATE Y,8:PRINT MID$(W$,3,8);
  622. 23340  GOSUB 23620:GOSUB 23670:GOSUB 23720:GOSUB 23770
  623. 23350  GOSUB 23870:GOSUB 23920:GOSUB 23970:RETURN
  624. 23420  IF W!<=0 THEN MID$(W$,1)=SPACE$(10):RETURN
  625. 23430  DY=CINT(W!/1000):DD=CINT(W!-DY*1000)
  626. 23440  DY=DY+20:IF DY>=100 THEN DY=DY-100
  627. 23450  MT(2)=28+ABS(DY MOD 4 = 0):DM=1
  628. 23460  IF DD>MT(DM) THEN DD=DD-MT(DM):DM=DM+1:GOTO 23460
  629. 23470  MID$(W$,7)=STR$(DY+100):MID$(W$,8)="-"
  630. 23480  MID$(W$,4)=STR$(DD+100):MID$(W$,5)="-"
  631. 23490  MID$(W$,1)=STR$(DM+100):RETURN
  632. 23530  ON X GOTO 23620,23670,23720,23770
  633. 23580  COLOR 0,7:ON X GOSUB 23620,23670,23720,23770
  634. 23590  COLOR 7,0:RETURN
  635. 23620  LOCATE Y,18
  636. 23630  PRINT USING"###### ";SV!(J);:RETURN
  637. 23670  LOCATE Y,25
  638. 23680  IF CP!(J)<0 THEN PRINT SPACE$(10);:RETURN
  639. 23690  PRINT USING"#####.### ";HP!(J);:RETURN
  640. 23720  LOCATE Y,35
  641. 23730  IF CP!(J)<0 THEN PRINT SPACE$(10);:RETURN
  642. 23740  PRINT USING"#####.### ";LP!(J);:RETURN
  643. 23770  LOCATE Y,45
  644. 23780  IF CP!(J)<0 THEN PRINT"  holiday ";:RETURN
  645. 23790  PRINT USING"#####.### ";CP!(J);:RETURN
  646. 23870  LOCATE Y,56
  647. 23880  IF M1!(J)<0.000999999 THEN PRINT SPACE$(8);:RETURN
  648. 23890  PRINT USING"####.###";M1!(J);:RETURN
  649. 23920  RETURN
  650. 23930  IF M2!(J)<0.000999999 THEN PRINT SPACE$(8);:RETURN
  651. 23940  PRINT USING"####.###";M2!(J);:RETURN
  652. 23970  LOCATE Y,66
  653. 23980  IF M3!(J)<0.000999999 THEN PRINT SPACE$(8);:RETURN
  654. 23990  PRINT USING"####.###";M3!(J);:RETURN
  655. 24030  CLS:PRINT TAB(1);MID$(XD$,5,24);" ";MID$(XD$,29,6);
  656. 24040  L=1:IF MID$(XD$,1,1)=" " THEN 24070
  657. 24050  L=L+1:IF L<=4 AND MID$(XD$,L,1)<>" " THEN 24050
  658. 24060  PRINT"(";MID$(XD$,1,L-1);")";
  659. 24070  GOSUB 24630:IF SL!=0 THEN 24090
  660. 24080  LOCATE 1,41:PRINT USING"STOP LIMIT =####.###";SL!;
  661. 24090  LOCATE 1,64:PRINT"P/E RATIO = ";:GOSUB 24320
  662. 24150  LOCATE 2,1:PRINT"ANNUAL POTENTIAL RETURN =";:GOSUB 24420
  663. 24160  LOCATE 2,64:PRINT"YIELD (%) = ";:GOSUB 24370
  664. 24170  LOCATE 4,19:PRINT"VOLUME";:LOCATE 4,59:PRINT"MOVING AVERAGES";
  665. 24180  LOCATE 5,10:PRINT"DATE     (100s)    HIGH      LOW       CLOSE";
  666. 24190  GOSUB 24470:GOSUB 24570:T1=7:RETURN
  667. 24220  GOSUB 24630:LOCATE 1,76:GOSUB 24320:LOCATE 2,76:GOSUB 24370
  668. 24230  IF SL!<>0 THEN LOCATE 1,53:PRINT USING"####.###";SL!;
  669. 24240  LOCATE 2,26:GOSUB 24420:PRINT SPACE$(39-POS(0));:RETURN
  670. 24320  IF CM!<=0 OR CM!>=99.95 THEN PRINT"NMF ";:RETURN
  671. 24330  IF CM!>=9.995 THEN PRINT USING"##.#";CM!;:RETURN
  672. 24340  PRINT USING"#.##";CM!;:RETURN
  673. 24370  IF CY!<0 OR CY!>=99.95 THEN PRINT"    ";:RETURN
  674. 24380  IF CY!>=9.995 THEN PRINT USING"##.#";CY!;:RETURN
  675. 24390  PRINT USING"#.##";CY!;:RETURN
  676. 24420  IF CP!<0.125 OR (GL!<=0 AND GH!<=0) THEN PRINT" NMF";:RETURN
  677. 24430  PRINT RL;CHR$(29);"% TO";RH;CHR$(29);"%";:RETURN
  678. 24470  LOCATE 5,56:IF P1<=0 THEN PRINT SPACE$(8);:RETURN
  679. 24480  IF TN=1 THEN PRINT USING"####";P1;:PRINT"-DAY";:RETURN
  680. 24490  PRINT USING"###";P1;:PRINT"-WEEK";:RETURN
  681. 24520  RETURN:IF P2<=0 THEN PRINT SPACE$(8);:RETURN
  682. 24530  IF TN=1 THEN PRINT USING"####";P2;:PRINT"-DAY";:RETURN
  683. 24540  PRINT USING"###";P2;:PRINT"-WEEK";:RETURN
  684. 24570  LOCATE 5,66:IF P3<=0 THEN PRINT SPACE$(8);:RETURN
  685. 24580  IF TN=1 THEN PRINT USING"####";P3;:PRINT"-DAY";:RETURN
  686. 24590  PRINT USING"###";P3;:PRINT"-WEEK";:RETURN
  687. 24630  CP!=CP!(TL)
  688. 24640  CE!=CSNG(CVI(MID$(XD$,41,2)))/100
  689. 24650  CM!=0:IF CE!>=0.01 THEN CM!=CP!/CE!
  690. 24660  CD!=CSNG(CVI(MID$(XD$,39,2)))/100
  691. 24670  CY!=0:IF CP!>=0.125 THEN CY!=CD!/CP!*100
  692. 24680  SL!=CSNG(CVI(MID$(XD$,43,2)))/32
  693. 24720  GL!=CSNG(CVI(MID$(XD$,45,2)))/32
  694. 24730  GH!=CSNG(CVI(MID$(XD$,47,2)))/32
  695. 24740  IF CP!<0.125 OR (GL!<=0 AND GH!<=0) THEN 24790
  696. 24750  IF GL!>0 AND GH!>0 THEN 24770
  697. 24760  IF GL!>0 THEN GH!=GL! ELSE GL!=GH!
  698. 24770  RL=CINT(((GL!/CP!)^0.2-1)*100+CY!)
  699. 24780  RH=CINT(((GH!/CP!)^0.2-1)*100+CY!)
  700. 24790  RETURN
  701. 24850  IF X2>X1 AND X2<=X3 AND X5>1 AND X5<=XC THEN X2=X2-1:X5=X5-1:RETURN
  702. 24860  IF X2<>X1 OR X5<=1 OR X5>XC THEN GOSUB 29850:RETURN
  703. 24870  X4=X4-1:X5=X4:X6=X6-1:H1=X1:G1=1:H2=X3:G2=80:Z=0:L=1
  704. 24880  SC(27)=&H7B4:DEF SEG:AD=VARPTR(SC(1)):CALL AD(H1,G1,H2,G2,Z,L)
  705. 24890  MID$(XD$,1)=XR$(X5):LOCATE X2,16,0:GOSUB 25520:GOSUB 25570:RETURN
  706. 24950  IF X2>=X1 AND X2<X3 AND X5>=1 AND X5<XC THEN X2=X2+1:X5=X5+1:RETURN
  707. 24960  IF X2<>X3 OR X5<1 OR X5>=XC THEN GOSUB 29850:RETURN
  708. 24970  X6=X6+1:X5=X6:X4=X4+1:H1=X1:G1=1:H2=X3:G2=80:Z=0:L=1
  709. 24980  SC(27)=&H6B4:DEF SEG:AD=VARPTR(SC(1)):CALL AD(H1,G1,H2,G2,Z,L)
  710. 24990  MID$(XD$,1)=XR$(X5):LOCATE X2,16,0:GOSUB 25520:GOSUB 25570:RETURN
  711. 25040  IF X4=1 THEN 25080
  712. 25050  IF X4<1 OR X4>XC THEN GOSUB 29850:RETURN
  713. 25060  X4=X4-17+X1:IF X4<1 THEN X4=1
  714. 25070  GOSUB 25440:GOTO 25090
  715. 25080  IF X2<=X1 OR X2>X3 THEN GOSUB 29850:RETURN
  716. 25090  X5=X4:X2=X1:RETURN
  717. 25140  IF X6=XC THEN 25190
  718. 25150  IF X4<1 OR X4>XC THEN GOSUB 29850:RETURN
  719. 25160  X4=X4+17-X1:T=XC-19+X1:IF T<1 THEN T=1
  720. 25170  IF X4>T THEN X4=T
  721. 25180  GOSUB 25440:X2=X3:X5=X6:RETURN
  722. 25190  IF X2<X3 AND X2>=X1 THEN X2=X3:X5=X6:RETURN ELSE GOSUB 29850:RETURN
  723. 25230  IF X4=1 THEN 25280
  724. 25240  X4=1:GOSUB 25440:GOTO 25290
  725. 25280  IF X5=1 THEN GOSUB 29850:RETURN
  726. 25290  X5=1:X2=X1:RETURN
  727. 25330  IF X6=XC THEN 25380
  728. 25340  X4=XC:X2=X1
  729. 25350  IF X4=1 OR X2>=19 THEN GOSUB 25440:GOTO 25390
  730. 25360  X4=X4-1:X2=X2+1:GOTO 25350
  731. 25380  IF X5=XC THEN GOSUB 29850:RETURN
  732. 25390  X5=XC:X2=X3:RETURN
  733. 25440  X3=X1:X6=X4
  734. 25450  MID$(XD$,1)=XR$(X6):LOCATE X3,16:GOSUB 25520:GOSUB 25570
  735. 25460  IF X6<XC AND X3<19 THEN X6=X6+1:X3=X3+1:GOTO 25450 ELSE RETURN
  736. 25520  PRINT MID$(XD$,5,24);" ";MID$(XD$,29,6);
  737. 25530  L=1:IF MID$(XD$,1,1)=" " THEN PRINT SPACE$(10);:RETURN
  738. 25540  L=L+1:IF L<=4 AND MID$(XD$,L,1)<>" " THEN 25540
  739. 25550  PRINT" (";MID$(XD$,1,L-1);")";SPACE$(9-L);:RETURN
  740. 25570  IF CVI(MID$(XD$,35,2))<0 THEN PRINT" DAILY":RETURN
  741. 25580  IF CVI(MID$(XD$,35,2))>0 THEN PRINT"WEEKLY":RETURN
  742. 25590  PRINT"  NONE":RETURN
  743. 25820  CLS:X1=0
  744. 25830  X1=X1+1:LOCATE X1,16
  745. 25840  PRINT"STOCK CHARTING/DATA ENTRY - RELEASE 2.1   UPDATE ";
  746. 25850  X1=X1+1:LOCATE X1,16
  747. 25860  PRINT"NAME OF STOCK------------SYMBOL (EXCH)---INTERVAL";
  748. 25890  X1=X1+2:RETURN
  749. 25930  LOCATE X2,40:PRINT" ";MID$(XD$,29,6);" ";:RETURN
  750. 25980  MID$(XD$,1)=XR$(X5)
  751. 25990  LOCATE X2,40:COLOR 0,7:PRINT" ";MID$(XD$,29,6);" ";:COLOR 7,0:RETURN
  752. 26440  GOSUB 26830:IF ESC THEN 26440
  753. 26450  MID$(XD$,1)="SMX2":MID$(XD$,5)=MKI$(64)
  754. 26460  MID$(XD$,7)=MKI$(XM):MID$(XD$,9)=MKI$(XC)
  755. 26470  MID$(XD$,11)=MKI$(X4):MID$(XD$,13)=MKI$(X5)
  756. 26480  FOR K=15 TO 63 STEP 2:MID$(XD$,K)=MKI$(0):NEXT K
  757. 26490  LSET XB$=XD$:PUT#2:IF R=0 THEN 26590
  758. 26580  FOR J=1 TO XC:LSET XB$=XR$(J):PUT#2:NEXT J
  759. 26590  CLOSE#2:LSET XD$=XR$(X5):RETURN
  760. 26640  GOSUB 26830:IF ESC THEN RETURN
  761. 26650  IF LOF(2)<=0 THEN XC=-1:CLOSE#2:KILL LEFT$(W$,L):RETURN
  762. 26660  GET#2:V2=0:IF MID$(XB$,1,4)="SMX2" THEN V2=-1:GOTO 26710
  763. 26670  XC=CVI(MID$(XB$,3,2)):IF XC>0 THEN X4=1:X5=1:GOTO 26740
  764. 26680  X4=0:X5=0:CLOSE#2:RETURN
  765. 26710  XC=CVI(MID$(XB$,9,2))
  766. 26720  X4=CVI(MID$(XB$,11,2)):X5=CVI(MID$(XB$,13,2))
  767. 26730  IF XC<=0 THEN CLOSE#2:RETURN
  768. 26740  FOR J=1 TO XC
  769. 26750  GET#2:LSET XR$(J)=XB$:IF V2 THEN 26790
  770. 26760  W!=CVS(MID$(XB$,37,4)):MID$(XR$(J),39)=MKI$(CINT(W!*100))
  771. 26770  W!=CVS(MID$(XB$,41,4)):MID$(XR$(J),41)=MKI$(CINT(W!*100))
  772. 26780  MID$(XR$(J),37)=MKI$(0):MID$(XR$(J),43)=MKI$(0)
  773. 26790  NEXT J:CLOSE#2:RETURN
  774. 26830  MID$(W$,1)=SPACE$(80):L=1:IF MID$(D$,12,1)<"A" THEN 26850
  775. 26840  MID$(W$,1)=MID$(D$,12,1):MID$(W$,2)=":":L=3
  776. 26850  MID$(W$,L)="INDEXFIL.SMX":L=L+11:ESC=0
  777. 26950  ON ERROR GOTO 26980
  778. 26960  OPEN LEFT$(W$,L) AS #2 LEN=64:ON ERROR GOTO 29930
  779. 26970  FIELD#2,64 AS XB$:RETURN
  780. 26980  IF ERR=71 THEN RESUME 26990 ELSE 29930
  781. 26990  GOSUB 29140:IF ESC THEN RETURN ELSE 26950
  782. 27340  GOSUB 29730:MID$(W$,1)=SPACE$(80):K=29
  783. 27350  IF MID$(XD$,K,1)=" " THEN K=K+1:IF K<=34 THEN 27350
  784. 27360  L=1:IF MID$(D$,12,1)<"A" THEN 27380
  785. 27370  MID$(W$,1)=MID$(D$,12,1):MID$(W$,2)=":":L=3
  786. 27380  MID$(W$,L)="D":IF CVI(MID$(XD$,35,2))>0 THEN MID$(W$,L)="W"
  787. 27390  L=L+1:MID$(W$,L)=MID$(XD$,K,35-K):L=L+35-K:MID$(W$,L)=".SMP":L=L+3
  788. 27410  LOCATE 23,1:PRINT"Loading volume and price data, one moment please ...";
  789. 27420  ON ERROR GOTO 27470
  790. 27430  OPEN LEFT$(W$,L) AS #3 LEN=32:ON ERROR GOTO 29930
  791. 27440  IF LOF(3)>0 THEN 27490 ELSE CLOSE#3:KILL LEFT$(W$,L)
  792. 27450  LOCATE 25,1:COLOR 23,0:PRINT"No price history file found.";
  793. 27460  COLOR 7,0:OK=0:BEEP:ESC=-1:RETURN
  794. 27470  IF ERR=71 THEN RESUME 27480 ELSE 29930
  795. 27480  GOSUB 29140:IF ESC THEN RETURN ELSE 27410
  796. 27490  FIELD#3,32 AS PB$:GET#3:IF LEFT$(PB$,4)="SMP2" THEN 27610
  797. 27510  TC=CVI(MID$(PB$,1,2)):TN=CVI(MID$(PB$,3,2)):TL=CVI(MID$(PB$,5,2))
  798. 27520  P1=CVI(MID$(PB$,7,2)):P2=CVI(MID$(PB$,9,2)):P3=CVI(MID$(PB$,11,2))
  799. 27530  GOTO 27630
  800. 27610  TC=CVI(MID$(PB$,9,2)):TN=CVI(MID$(PB$,11,2)):TL=CVI(MID$(PB$,13,2))
  801. 27620  P1=CVI(MID$(PB$,15,2)):P2=CVI(MID$(PB$,17,2)):P3=CVI(MID$(PB$,19,2))
  802. 27630  TF=TL+1:IF TF>TC THEN TF=1
  803. 27640  FOR J=1 TO TC:GET#3
  804. 27650  TP!(J)=CVS(MID$(PB$,1,4)):SV!(J)=CVS(MID$(PB$,5,4))
  805. 27660  HP!(J)=CVS(MID$(PB$,9,4)):LP!(J)=CVS(MID$(PB$,13,4))
  806. 27670  CP!(J)=CVS(MID$(PB$,17,4)):M1!(J)=CVS(MID$(PB$,21,4))
  807. 27680  M2!(J)=CVS(MID$(PB$,25,4)):M3!(J)=CVS(MID$(PB$,29,4))
  808. 27690  NEXT J:CLOSE#3:ESC=0:UPD=0:RETURN
  809. 27740  GOSUB 29730:MID$(W$,1)=SPACE$(80):K=29
  810. 27750  IF MID$(XD$,K,1)=" " THEN K=K+1:IF K<=34 THEN 27750
  811. 27760  L=1:IF MID$(D$,12,1)<"A" THEN 27780
  812. 27770  MID$(W$,1)=MID$(D$,12,1):MID$(W$,2)=":":L=3
  813. 27780  MID$(W$,L)="D":IF CVI(MID$(XD$,35,2))>0 THEN MID$(W$,L)="W"
  814. 27790  L=L+1:MID$(W$,L)=MID$(XD$,K,35-K):L=L+35-K:MID$(W$,L)=".SMP":L=L+3
  815. 27810  LOCATE 23,1:PRINT"Writing volume and price data, one moment please ...";
  816. 27820  ON ERROR GOTO 27850
  817. 27830  OPEN LEFT$(W$,L) AS #3 LEN=32:ON ERROR GOTO 29930
  818. 27840  FIELD#3,32 AS PB$:GOTO 27870
  819. 27850  IF ERR=71 THEN RESUME 27860 ELSE 29930
  820. 27860  GOSUB 29140:GOTO 27810
  821. 27870  MID$(PD$,1)="SMP2":MID$(PD$,5)=MKI$(32):MID$(PD$,7)=MKI$(TC)
  822. 27880  MID$(PD$,9)=MKI$(TC):MID$(PD$,11)=MKI$(TN):MID$(PD$,13)=MKI$(TL)
  823. 27890  MID$(PD$,15)=MKI$(P1):MID$(PD$,17)=MKI$(P2):MID$(PD$,19)=MKI$(P3)
  824. 27910  FOR K=21 TO 31 STEP 2:MID$(PD$,K)=Z$:NEXT K
  825. 27920  LSET PB$=PD$:PUT#3
  826. 27930  FOR J=1 TO TC
  827. 27940  MID$(PD$,1)=MKS$(TP!(J)):MID$(PD$,5)=MKS$(SV!(J))
  828. 27950  MID$(PD$,9)=MKS$(HP!(J)):MID$(PD$,13)=MKS$(LP!(J))
  829. 27960  MID$(PD$,17)=MKS$(CP!(J)):MID$(PD$,21)=MKS$(M1!(J))
  830. 27970  MID$(PD$,25)=MKS$(M2!(J)):MID$(PD$,29)=MKS$(M3!(J))
  831. 27980  LSET PB$=PD$:PUT#3
  832. 27990  NEXT J:CLOSE#3:UPD=0:RETURN
  833. 28110  H=CSRLIN:G=POS(0)+1:Q=9:MID$(W$,1)=SPACE$(Q)
  834. 28120  COLOR 0,7:PRINT SPACE$(Q+2);:COLOR 7,0:P=1
  835. 28130  LOCATE H,G,1:GOSUB 29660:LOCATE H,G,0
  836. 28140  IF LEFT$(C$,1)>="0" AND LEFT$(C$,1)<="9" THEN 28210
  837. 28150  IF LEFT$(C$,1)="." OR LEFT$(C$,1)="/" THEN 28210
  838. 28160  IF LEFT$(C$,1)=CHR$(32) THEN IF P>1 THEN 28210 ELSE 28580
  839. 28170  IF LEFT$(C$,1)=CHR$(13) THEN 28310
  840. 28180  IF LEFT$(C$,1)=CHR$(27) THEN L=-1:RETURN
  841. 28190  IF LEFT$(C$,1)=CHR$(8) THEN 28240 ELSE GOSUB 29830:GOTO 28130
  842. 28210  IF P>Q THEN GOSUB 29850:GOTO 28130
  843. 28220  MID$(W$,P,1)=LEFT$(C$,1):G=G+1:P=P+1
  844. 28230  COLOR 0,7:PRINT LEFT$(C$,1);:COLOR 7,0:GOTO 28130
  845. 28240  IF P<=1 THEN GOSUB 29850:GOTO 28130
  846. 28250  G=G-1:P=P-1:MID$(W$,P,1)=" "
  847. 28260  LOCATE H,G:COLOR 0,7:PRINT" ";:COLOR 7,0:GOTO 28130
  848. 28310  W!=0:L=P-1:IF L<=0 THEN RETURN
  849. 28320  J=1:K=1:GOSUB 28640:IF K<=J THEN 28350 ELSE IF K>L THEN 28380
  850. 28330  IF MID$(W$,K,1)=" " THEN 28410
  851. 28340  IF MID$(W$,K,1)="/" THEN 28430
  852. 28350  IF MID$(W$,K,1)<>"." THEN 28560
  853. 28360  IF K>=L THEN 28560
  854. 28370  K=K+1:J=K:GOSUB 28640:IF K<=J THEN 28560
  855. 28380  J=1:W!=VAL(MID$(W$,J,K-J)):IF K>L THEN 28520
  856. 28390  GOSUB 28680:IF K>L THEN 28520 ELSE 28560
  857. 28410  W!=VAL(MID$(W$,J,K-J)):GOSUB 28680:IF K>L THEN 28530
  858. 28420  J=K:GOSUB 28640:IF K>L OR MID$(W$,K,1)<>"/" THEN 28560
  859. 28430  IF K<=J OR K>=L THEN 28570
  860. 28440  T!=VAL(MID$(W$,J,K-J)):K=K+1:J=K:GOSUB 28640
  861. 28450  IF K<=J THEN 28570
  862. 28460  U!=VAL(MID$(W$,J,K-J)):IF K>L THEN 28480
  863. 28470  GOSUB 28680:IF K<=L THEN 28570
  864. 28480  IF T!>0 AND U!>0 AND T!<U! THEN W!=W!+T!/U! ELSE 28570
  865. 28520  IF R=0 AND INT(W!)<>W! THEN 28550
  866. 28530  IF W!>=WL! AND W!<=WH! THEN RETURN
  867. 28540  LOCATE 25,1:COLOR 23,0:PRINT"Too big or too small.";:GOTO 28590
  868. 28550  LOCATE 25,1:COLOR 23,0:PRINT"Whole number only.";:GOTO 28590
  869. 28560  LOCATE 25,1:COLOR 23,0:PRINT"Improper numeric entry.";:GOTO 28590
  870. 28570  LOCATE 25,1:COLOR 23,0:PRINT"Improper fraction entry.";:GOTO 28590
  871. 28580  LOCATE 25,1:COLOR 23,0:PRINT"First character cannot be a space.";
  872. 28590  COLOR 7,0:BEEP:OK=0:GOTO 28130
  873. 28640  IF MID$(W$,K,1)<"0" THEN RETURN
  874. 28650  IF MID$(W$,K,1)>"9" THEN RETURN
  875. 28660  K=K+1:IF K<=L THEN 28640 ELSE RETURN
  876. 28680  IF MID$(W$,K,1)<>" " THEN RETURN
  877. 28690  K=K+1:IF K<=L THEN 28680 ELSE RETURN
  878. 29040  LOCATE 22,1:PRINT SPACE$(80);:IF MID$(D$,12,1)=" " THEN 29180
  879. 29050  PRINT"Insert the correct PROGRAM diskette";:GOTO 29190
  880. 29140  LOCATE 22,1:PRINT SPACE$(80);:IF MID$(D$,12,1)=" " THEN 29180
  881. 29150  PRINT"Insert the correct DATA diskette";
  882. 29160  IF MID$(D$,12,1)<"A" THEN 29190
  883. 29170  PRINT " in drive ";MID$(D$,12,1);" and close the door.";:GOTO 29230
  884. 29180  PRINT"Make sure the correct diskette is";
  885. 29190  PRINT" in the system drive and close the door.";
  886. 29230  LOCATE 24,1:BEEP
  887. 29240  PRINT"Press ENTER or Esc to continue.";
  888. 29250  H=CSRLIN:G=POS(0)
  889. 29260  LOCATE H,G,1:GOSUB 29650
  890. 29270  IF ESC OR LEFT$(C$,1)=CHR$(13) THEN 29290
  891. 29280  GOSUB 29830:GOTO 29260
  892. 29290  H1=23:H2=24:G1=1:G2=80:GOSUB 29740:RETURN
  893. 29550  PRINT" (Y=Yes, N=No)? ";:H=CSRLIN:G=POS(0)
  894. 29560  LOCATE H,G,1:GOSUB 29650:LOCATE H,G:IF ESC THEN RETURN
  895. 29570  IF LEFT$(C$,1)="n" OR LEFT$(C$,1)="N" THEN PRINT"N";:YES=0:RETURN
  896. 29580  IF LEFT$(C$,1)="y" OR LEFT$(C$,1)="Y" THEN PRINT"Y";:YES=-1:RETURN
  897. 29590  GOSUB 29830:GOTO 29560
  898. 29650  MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF C$<>Z$ THEN 29650
  899. 29660  MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF C$=Z$ THEN 29660
  900. 29670  ESC=0:IF LEFT$(C$,1)=CHR$(27) THEN ESC=-1
  901. 29680  LOCATE ,,0:IF OK THEN RETURN
  902. 29690  LOCATE 25,1:PRINT SPACE$(35);:OK=-1:RETURN
  903. 29730  H1=21:H2=24:G1=1:G2=80
  904. 29740  DEF SEG:AD=VARPTR(BS(1)):CALL AD(H1,G1,H2,G2):RETURN
  905. 29830  LOCATE 25,1:COLOR 23,0:PRINT"Wrong key pressed, try again.";
  906. 29840  COLOR 7,0:OK=0:BEEP:RETURN
  907. 29850  LOCATE 25,1:COLOR 23,0:PRINT"Can't move any farther.";
  908. 29860  COLOR 7,0:OK=0:BEEP:RETURN
  909. 29870  LOCATE 25,1:COLOR 23,0:PRINT"Data must be entered.";
  910. 29880  COLOR 7,0:OK=0:BEEP:RETURN
  911. 29910  LOCATE 25,1:COLOR 23,0:PRINT"Function not available.";
  912. 29920  COLOR 7,0:OK=0:BEEP:RETURN
  913. 29930  LOCATE 19,1,0:PRINT SPACE$(80);
  914. 29940  PRINT"PROGRAM ABORTED DUE TO A FATAL ERROR.  F";
  915. 29950  PRINT"urther explanation of the following     ";
  916. 29960  PRINT"error message may be found in Appendix A";
  917. 29970  PRINT" of the IBM or Compaq BASIC manual.     ";
  918. 29980  PRINT SPACE$(239);:LOCATE 22,1,1:BEEP:ON ERROR GOTO 0
  919. 29990  END
  920.